using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
using Connection;
namespace Entidades
{
	public abstract class DALPerfil
	{
		private const string __ErrorAlta = "No se pudo dar el alta (Perfil), ";
		private const string __ErrorBaja = "No se pudo dar la baja (Perfil), ";
		private const string __ErrorModificacion = "No se pudo hacer la modificacion (Perfil), ";
		private const string __ErrorTraerUno = "No se pudo Traer Uno (Perfil), ";
		private const string __ErrorTraerTodos = "No se pudo Traer Todos (Perfil), ";
		public static void Alta(Perfil Perfil)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("IdUsuario", Perfil.IdUsuario);
				pa.add("Apellido", Perfil.Apellido);
				pa.add("Nombre", Perfil.Nombre);
				pa.add("FechaNacimiento", Perfil.FechaNacimiento);
				pa.add("Sexo", Perfil.Sexo);
                pa.add("Telefono", Perfil.Telefono);
                pa.add("Tema", Perfil.Tema);
				using (DataSet ds = Connection.Connection.Traer("p_Perfil_Alta", pa)) {
					if (ds.Tables.Count > 0) {
						Perfil.Id = int.Parse(ds.Tables[0].Rows[0][0].ToString());
					} else {
						throw new Exception(__ErrorAlta);
					}
				}
			} catch (Exception ex) {
				throw new Exception(__ErrorAlta + ex.Message);
			}
		}
		public static void Baja(int Id)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("Id", Id);
				Connection.Connection.Ejecutar("p_Perfil_Baja", pa);
			} catch (Exception ex) {
				throw new Exception(__ErrorBaja + ex.Message);
			}
		}
		public static void Modificar(Perfil Perfil)
		{
			try {
				parametrosArray pa = new parametrosArray();
				pa.add("Id", Perfil.Id);
				pa.add("IdUsuario", Perfil.IdUsuario);
				pa.add("Apellido", Perfil.Apellido);
				pa.add("Nombre", Perfil.Nombre);
				pa.add("FechaNacimiento", Perfil.FechaNacimiento);
				pa.add("Sexo", Perfil.Sexo);
				pa.add("Telefono", Perfil.Telefono);
                pa.add("Tema", Perfil.Tema);
                Connection.Connection.Ejecutar("p_Perfil_Modificacion", pa);
			} catch (Exception ex) {
				throw new Exception(__ErrorModificacion + ex.Message);
			}
		}
		public static Perfil traerUno(int Id)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("Id", Id);
			using (DataSet ds = Connection.Connection.Traer("p_Perfil_TraerUno", pa)) {
				if (ds.Tables.Count > 0) {
					if (ds.Tables[0].Rows.Count > 0) {
						return llenarEntidad(ds.Tables[0].Rows[0]);
					}
				}
			}
			throw new Exception(__ErrorTraerUno);
		}
		public static List<Perfil> TraerTodos()
		{
			using (DataSet ds = Connection.Connection.Traer("p_Perfil_TraerTodos")) {
				if (ds.Tables.Count > 0) {
					List<Perfil> li = new List<Perfil>();
					if (ds.Tables[0].Rows.Count > 0) {
						foreach (DataRow dr in ds.Tables[0].Rows) {
							li.Add(llenarEntidad(dr));
						}
					}
					return li;
				}
			}
			throw new Exception(__ErrorTraerTodos);
		}

        internal static List<Perfil> TraerTodosPorSexo(string sexo)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("sexo", sexo);
            using (DataSet ds = Connection.Connection.Traer("p_Perfil_TraerTodosPorSexo", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Perfil> li = new List<Perfil>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            return null;
        }


		public static Perfil getOneByIdUsuario(int IdUsuario)
		{
			parametrosArray pa = new parametrosArray();
			pa.add("IdUsuario", IdUsuario);
			using (DataSet ds = Connection.Connection.Traer("p_Perfil_getOneByIdUsuario", pa)) {
				if (ds.Tables.Count > 0) {
					if (ds.Tables[0].Rows.Count > 0) {
						return llenarEntidad(ds.Tables[0].Rows[0]);
					}
				}
			}
			return null;
		}

		private static Perfil llenarEntidad(DataRow dr)
		{
			Perfil Perfil = new Perfil();
			if (dr.Table.Columns.Contains("Id")) {
				if (!object.ReferenceEquals(dr["Id"], DBNull.Value)) {
					Perfil.Id = int.Parse(dr["Id"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("IdUsuario")) {
				if (!object.ReferenceEquals(dr["IdUsuario"], DBNull.Value)) {
					Perfil.IdUsuario = int.Parse(dr["IdUsuario"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("Apellido")) {
				if (!object.ReferenceEquals(dr["Apellido"], DBNull.Value)) {
					Perfil.Apellido = dr["Apellido"].ToString();
				}
			}
			if (dr.Table.Columns.Contains("Nombre")) {
				if (!object.ReferenceEquals(dr["Nombre"], DBNull.Value)) {
					Perfil.Nombre = dr["Nombre"].ToString();
				}
			}
			if (dr.Table.Columns.Contains("FechaNacimiento")) {
				if (!object.ReferenceEquals(dr["FechaNacimiento"], DBNull.Value)) {
					Perfil.FechaNacimiento = DateTime.Parse(dr["FechaNacimiento"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("Sexo")) {
				if (!object.ReferenceEquals(dr["Sexo"], DBNull.Value)) {
					Perfil.Sexo = dr["Sexo"].ToString();
				}
			}
			if (dr.Table.Columns.Contains("Telefono")) {
				if (!object.ReferenceEquals(dr["Telefono"], DBNull.Value)) {
					Perfil.Telefono = int.Parse(dr["Telefono"].ToString());
				}
			}
			if (dr.Table.Columns.Contains("FechaModificacion")) {
				if (!object.ReferenceEquals(dr["FechaModificacion"], DBNull.Value)) {
					Perfil.FechaModificacion = DateTime.Parse(dr["FechaModificacion"].ToString());
				}
			}
            if (dr.Table.Columns.Contains("Tema"))
            {
                if (!object.ReferenceEquals(dr["Tema"], DBNull.Value))
                    Perfil.Tema = int.Parse(dr["Tema"].ToString());
                else
                    Perfil.Tema = 1;
            }

			return Perfil;
		}




       
    }
}
